![]() |
![]() |
|
rtk 20012001.1.1 (popravi)Tipkanje 1. podnalogaPredpostavimo, da lahko vse znake, ki jih želimo natipkati, razdelimo v dve skupini: nekatere tipkamo vedno z levo roko, druge pa vedno z desno. NalogaPopravi funkcijo
Na voljo imaš funkcijo Vhodni podatkiNiz, sestavljen iz črk, ki jih najdemo na slovenski tipkovnici. Izhodni podatkiDolžina najdaljšega podniza danega niza, ki ga je mogoče natipkati z eno samo roko. PrimerČe se a in e tipkata vedno z levo roko, i, o in u pa vedno z desno, je pri nizu aeiou pravilni odgovor:
Podniz iou lahko namreč natipkamo z desno roko. Poglejmo si še nekaj primerov.
Podniz aaea lahko namreč natipkamo z levo roko.
Podniz aea lahko namreč natipkamo z levo roko.
Nobenih dveh zaporednih znakov ne moremo natipkati z isto roko.
V tem primeru lahko niz ii v celoti natipkamo z desno ali pa ee z levo ali pa oo z desno. Uradna rešitevdef s_katero_roko(crka): """Vrne niz, ki pove, s katero roko natipkamo dano črko.""" leva = 'qwertasdfgyxcvbQWERTASDFGYXCVB' desna = 'zuiopšđhjklčćžnmZUIOPŠĐHJKLČĆŽNM' assert crka in leva or crka in desna if crka in leva: return 'leva' else: return 'desna' def dolzina_najdaljsega_podniza(vhod): """Izračuna dolžino najdaljšega podniza v vhodnem nizu.""" trenutna_roka = None max_z_eno = 0 st_s_trenutno = 0 ze_tipkamo = False # Če smo pri prvem znaku, moramo znak obravnavati posebej. for crka in vhod: nova_roka = s_katero_roko(crka) if not ze_tipkamo: ze_tipkamo = True st_s_trenutno = 1 elif nova_roka == trenutna_roka: # Z isto toko kot doslej natipkamo še en znak več. st_s_trenutno += 1 elif st_s_trenutno > max_z_eno: # Zamenjamo roko. Mogoče smo z dosedanjo dosegli nov rekord. max_z_eno = st_s_trenutno st_s_trenutno = 1 else: st_s_trenutno = 1 trenutna_roka = nova_roka # Morda je rekordno zaporedje tisto na koncu niza, zato vrnemo maksimum. return max(max_z_eno, st_s_trenutno) 2001.1.3 (popravi)Besedilo v stolpcu 1. podnalogaImamo poljubno dolgo besedilo v neproporcionalni pisavi (vsi znaki so enako
široki). Med besedami je zaradi poravnavanja desnega roba besedila včasih
lahko po več kot en presledek. Nobena vrstica ni daljša od NalogaPopravi funkcijo
OpombaPrvi stavek se začne s prvim znakom v besedilu. Vsak naslednji stavek se prične za znakom za konec stavka (to je lahko pika, klicaj ali vprašaj), ki mu sledi presledek ali konec vrstice (Zaradi enostavnosti zanemarimo primer, ko piki sledi narekovaj na koncu dobesednega navedka, kar v resnici tudi pomeni konec stavka, čeprav prejšnja definicija trdi drugače. Če bi se hoteli ukvarjati s takšnimi podrobnostmi, bi tako ali tako prišli v težave pri parih ?" in !", ki lahko pomenita konec stavka ali pa tudi ne.). V besedilu ni okrajšav, kjer bi bila uporabljena pika (vsaka pika, ki ji sledi presledek ali konec vrstice, pomeni konec stavka). Vhodni podatkiDatoteka Izhodni podatkiŠtevilo stavkov, ki so v celotni napisani v eni izmed vrstic. PrimerV spodnjem besedilu je osem stavkov, ki so v celoti na eni sami vrstici.
Uradna rešitevdef stetje_stavkov(besedilo): """Pregleda dano besedilo in prešteje stavke, ki so v celoti zapisani v eni vrstici. Vrne število takih stavkov.""" stanje = 'med' n = 0 # Lahko se nahajamo v treh možnih stanjih: v praznem prostoru med dvema stavkoma ('med'), # lahko smo v stavku, ki se je začel v trenutni vrstici ('zacTren'), # ali pa v stavku, ki se je začel že v neki prejšnji vrstici ('zacPrej'). # Možna stanja so torej 'zacTren', 'zacPrej', 'med'. with open(besedilo, 'r') as besedilo: for vrstica in besedilo: if stanje == 'zacTren': stanje = 'zacPrej' l = len(vrstica) for i in range(0, l): if stanje == 'med' and (vrstica[i] == ' '): stanje = 'zacTren' if (vrstica[i] in '.!?') and ((i == l - 1) or vrstica[i + 1] in ' \n'): if stanje == 'zacTren': n += 1 stanje = 'med' return n 2001.1.4 (popravi)Pitagorejske trojice 1. podnalogaNalogaPopravi funkcijo
Vhodni podatkiDve naravni števili. Izhodni podatkiŠtevilo pitagorejskih trojic, ki ustrezajo pogojem. Primer
Za Uradna rešitevimport math def stevilo_trojic(a, b): """Izračuna število pitagorejskih trojic (x, y, z), za katere velja, da je z med vključno a in b.""" n = 0 z = a while z <= b: x = 1 while x < z: y = math.sqrt(z * z - x * x) if y.is_integer(): n += 1 x += 1 z += 1 return nMesto objave ob koncu projekta 15.9.2018 |